#ifndef  STRUCT_H

#define  STRUCT_H

#include <stdio.h> 

#include <string.h> 

typedef struct time {

	int year;

	int month;

	int day;

}time;

typedef struct subject {

	char name[45]; //科目名称

	char node[20]; //科目编号 

	float cavlue;//学分 

	float grade;//成绩 

	float gpa;//折合绩点 （我们自动算）

	int type; //必修 专业选修 限选 公选 

	struct subject* next; //该学生的下一个课程 

}subject;

typedef struct project {

	char name[45];  //项目名称

	char member[20][45]; //成员

	char teacher[45]; // 指导老师

	char node[20]; // 项目编号 

	time start; // 项目开始时间

	time finish; //项目结束时间

	float level; //项目等级

	struct project* next; // 该学生的下一个项目

}project;

typedef struct medal {

	char name[45]; //奖项名称 

	char node[20]; //奖项编号

	char member[20][45]; //奖项参与成员

	char organizer[45];  //主办方

	float level; //获奖等级

	time date; //获奖时间

	struct medal* next; //该学生的下一个奖项

}medal;

typedef struct paper {

	char name[45]; // 论文名称 

	char member[20][45]; // 论文成员 

	char node[20];  // 期刊号 

	float level; // 等级

	time date;

	struct paper* next; // 该学生的下一个论文 

}paper;


typedef struct account {

	char user[20]; //学生学号 

	char password[20]; //学生密码 

	int view_level; //阅览等级 

	struct account* next;

}account;

typedef struct student {

	char id[20]; //学生学号

	char name[45]; //学生姓名 

	char sexual[20]; //学生性别 

	int major; // 标记专业（转专业）

	int session; // 届数标记（降转）

	struct student* next; //下一个学生   

	// 该学生的 课程 / 奖项 / 项目 / 论文 的 头 / 尾 指针

	// 以下指针，在文件被读入时初始化，在文件被写入时初始化为NULL

	struct subject* pH_subject;

	struct subject* pT_subject;

	struct medal* pH_medal;

	struct medal* pT_medal;

	struct project* pH_project;

	struct project* pT_project;

	struct paper* pH_paper;

	struct paper* pT_paper;

}student;

char User[45]; // 当前用户的用户名 

int  View_Level; // 当前账号浏览等级 

int  Loop; // 当前程序循环状态 

char Opera[100]; //当前操作名

char ref[27][500]; //当前参数

//int inval_ref[27]; // 屏蔽当前参数 0为有效 1为无效 //废弃 

// 以下指针，在文件被读入时初始化，在文件被写入时初始化为NULL

student* pH_student;

student* pT_student;

account* pH_account;

account* pT_account;

void Init();

void input_time(time* Cur, int year, int month, int day);

void read_student();

void write_student();

void create_student();

void delete_student(student* p_last);

void read_account();

void write_account();

void create_account();

void delete_account(account* p_last);

void read_subject(student* p);

void write_subject(student* p);

void create_subject(student* p);

void delete_subject(subject* p_last);

void read_medal(student* p);

void write_medal(student* p);

void create_medal(student* p);

void delete_medal(medal* p_last);

void read_project(student* p);

void write_project(student* p);

void create_project(student* p);

void delete_project(project* p_last);

void read_paper(student* p);

void write_paper(student* p);

void create_paper(student* p);

void delete_paper(paper* p_last);

#endif